FB: porovnani s UPPER

Otázka od: Petr Smolík

5. 12. 2002 14:14

Ahoj,

proc nefunguje tento SELECT:

SELECT UPPER(NAME)
FROM USER
WHERE UPPER(NAME) LIKE UPPER('Nov%k')

kdyz za "%" dam dlouhe "a".

S "%" to vybere dobre Nováky, dokonce to dobre prevede na velka pismena, ale v
LIKE to neprojde.

Proc? Jak to resite?
Nikde jsem k tomu nic nenasel  

Dik.

Petr Smolík
psmolik@fides.cz

Odpovedá: Lebeda David

5. 12. 2002 16:49

> SELECT UPPER(NAME)
> FROM USER
> WHERE UPPER(NAME) LIKE UPPER('Nov%k')
>
> kdyz za "%" dam dlouhe "a".
>
> S "%" to vybere dobre Nováky, dokonce to dobre prevede na velka
> pismena, ale v LIKE to neprojde.

Nechova-li se upper korektne, muze pomoci za slovo Nov%k pripsat COLLATE
PXW_CSY.

Tady ale nerozumim, proc to druhe upper je? Vzdyt by stacilo like 'NOV%K' ne?

Jestli ten retezec predavas parametrem, tak to je problem - viz tez archiv. Pak
bys
musel upper na parametr ozelet a na klientovi pouzit AnsiUpperCase.

David Lebeda

Odpovedá: Petr Smolík

5. 12. 2002 16:59

>> SELECT UPPER(NAME)
>> FROM USER
>> WHERE UPPER(NAME) LIKE UPPER('Nov%k')
>>
>> kdyz za "%" dam dlouhe "a".
>>
>> S "%" to vybere dobre Nováky, dokonce to dobre prevede na velka
>> pismena, ale v LIKE to neprojde.

> Nechova-li se upper korektne, muze pomoci za slovo Nov%k pripsat COLLATE
> PXW_CSY.

Jo tak to funguje. Dik, netusil jsem, ze se to takhle da predat.
Ale neni mi jasne, ze ve vracenych zaznamech je to prevedene dobre.
Ale hlavne, ze uz to funguje. Dik.

> Tady ale nerozumim, proc to druhe upper je? Vzdyt by stacilo like 'NOV%K' ne?

Ten select je sestavovan dynamicky (normalne tam byva treba "Novák") a jestte
ne v Delphi.

Ale dik.

Petr Smolík
psmolik@fides.cz

Odpovedá: Lebeda David

5. 12. 2002 16:29

> > Nechova-li se upper korektne, muze pomoci za slovo Nov%k pripsat
> > COLLATE PXW_CSY.
>
> Jo tak to funguje. Dik, netusil jsem, ze se to takhle da predat.
> Ale neni mi jasne, ze ve vracenych zaznamech je to prevedene dobre.

Na sloupci name mas zrejme nastavene collate jiz v navrhu databaze a upper ho
pak respektuje. Kdyz mu ale predhodis pevny text, tak neni jasne, jake collate
se ma
pouzit, resp. zda vubec nejake a funkce upper pak nezvetsi znaky s diakritikou.

Collate pro funkci upper proto je treba psat pro pevne texty, zatimco aplikuje-
li se na
hodnotu z nejakeho sloupce, tak tam to je nutne jen tehdy, nema-li sloupec
zadne
nebo chces pouzit jine.

David Lebeda